package 字符串.右旋字符串卡码;

import java.util.Scanner;

/*
字符串的右旋转操作是把字符串尾部的若干个字符转移到字符串的前面。给定一个字符串 s 和一个正整数 k，请编写一个函数，将字符串中的后面 k 个字符移到字符串的前面，实现字符串的右旋转操作。
例如，对于输入字符串 "abcdefg" 和整数 2，函数应该将其转换为 "fgabcde"。

输入：输入共包含两行，第一行为一个正整数 k，代表右旋转的位数。第二行为字符串 s，代表需要旋转的字符串。
输出：输出共一行，为进行了右旋转操作后的字符串。

样例输入：
2
abcdefg
样例输出：
fgabcde

想法：
    先编写按位置反转字符串的函数，然后按k来表示位置（先整体反转，再局部）
思路：
    1. 会想到直接开新数组然后用System.arraycopy来复制字符串
    但是如果不单独新开数组的话，就有第二种方法
    2. 在本身数组上操作，那就借鉴反转字符串里的单词的思路，先整体再局部，先将数组整体翻转，再分两部分局部翻转
* */
public class Solution {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int k = scan.nextInt();
        String str = scan.next();
        char[] chars = str.toCharArray();
        int len = chars.length;
        reverse(chars, 0, len - 1);
        reverse(chars, 0, k - 1);
        reverse(chars, k, len - 1);
        System.out.println(new String(chars));
    }
    public static void reverse(char[] chars, int left, int right){
        char temp;
        while (left < right){
            temp = chars[right];
            chars[right] = chars[left];
            chars[left] = temp;
            left ++;
            right --;
        }
    }
}
